package LeetCode;

//给你一个单链表的引用结点head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。
//请你返回该链表所表示数字的 十进制值 。
public class TestNum1290 {
    public int getDecimalValue(ListNode head) {
        //利用理解十进制数除余思想，比如整数534，当读到53时发现后边还有一个数，则将53乘10加后边的数
        ListNode prev = head;
        int ans = 0;
        while (prev != null) {
            //还有下一位数，将之前的数字和左移一位
            ans = ans << 1 + prev.val;
            prev = prev.next;
        }
        return ans;
    }
    //自己写的
//    public int getDecimalValue(ListNode head) {
//        ListNode prev = head;
//        int size = 0;
//        while (prev != null) {
//            prev = prev.next;
//            size++;
//        }
//        int sum = 0;
//        for (int i = size; i > 0; i--) {
//            if (head.val == 1) {
//                sum = sum + gteNum(i - 1);
//            }
//            head = head.next;
//        }
//        return sum;
//    }
//
//    public int gteNum(int n) {
//        int number = 1;
//        for (int i = 0; i < n; i++) {
//            number = number * 2;
//        }
//        return number;
//    }
}
